package com.alexatguigu.three_conductors_buy_fifty_tickets.sell;

public class TicketWindow implements Runnable{
    // 共享的票池，注意用volatile保证多线程可见性
    private volatile static int tickets = 50;

    // 锁对象，用于同步
    private static final Object lock = new Object();

    // 售票员名字
    private String name;

    // 构造方法，传入售票员名字
    public TicketWindow(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        // 只要还有票就一直卖
        while (tickets > 0) {
            // synchronized加锁，保证线程安全
            synchronized (lock) {
                // 再次判断是否有票（双重检查）
                if (tickets > 0) {
                    // 模拟出票时间
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    // 打印售票信息
                    System.out.println(name + " 卖出了第 " + tickets + " 张票");
                    // 票数减1
                    tickets--;
                }
            }

            // 模拟其他操作时间
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
